package com.itheima.day15.第一题;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;
import java.util.Scanner;

/*
【编号2004】有一个抽奖池，里面存放了一些固定金额的奖金

int[] prizePool = {100, 200, 300, 400, 500, 600, 700, 800, 900, 1000};
此时，有两个人A和B轮流在奖箱中随机抽奖（即A抽一次-->B抽一次-->A抽一次-->B抽一次...），直到所有的奖金都被抽出，每次抽奖耗时1秒。
请编写程序，使用两个线程模拟两人的抽奖过程，输出结果如下（金额的顺序随机）：

A抽出奖金600
B抽出奖金1000
A抽出奖金900
B抽出奖金300
A抽出奖金500
B抽出奖金200
A抽出奖金700
B抽出奖金100
A抽出奖金800
B抽出奖金400
* */
public class Demo1 {
    public static void main(String[] args) {
        PrizePool p = new PrizePool();
        Random r = new Random();
        ArrayList<Integer> list = new ArrayList<>();
        Collections.addAll(list,100, 200, 300, 400, 500, 600, 700, 800, 900, 1000);

        new Thread(() ->{
           while (true){
               synchronized ("lock"){
                   if (list.size() == 0){
                       break;   //抽完退出
                   }else {
                       if (p.isFlag()){
                           Integer remove = list.remove(r.nextInt(list.size()));
                           System.out.println("A抽出奖金" + remove);
                           p.setFlag(false);
                           p.countSubtract();
                           "lock".notify();
                       }else{
                           try {
                               "lock".wait();
                           } catch (InterruptedException e) {
                               e.printStackTrace();
                           }
                       }
                   }
               }

           }
        }).start();

        new Thread(() ->{
            while (true){
                synchronized ("lock"){
                    if (p.getCount() == 0){
                        break;   //抽完退出
                    }else {
                        if (!p.isFlag()){
                            Integer remove = list.remove(r.nextInt(list.size()));
                            System.out.println("B抽出奖金" + remove);
                            p.setFlag(true);
                            p.countSubtract();
                            "lock".notify();
                        }else{
                            try {
                                "lock".wait();
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                }

            }
        }).start();

    }
}
